Authoring Bundle
It is possible to collect one or more custom entities into a package that can be installed onto a site. We call these packages a bundle. Bundles contain a definition for tables, menus and pages. When installed they add their definitions to the site.
Tables that collide with existing Tables will abort the installation of a bundle. Pages that collide will be replaced. Menus will never collide and are simply additive.
Bundles can be generated from a site that already has tables/pages/menus configured using the Download feature. See Bundle Installation.
Bundle Contents
A bundle contains the definition for one or more entities, notably including
Template Bundle JSON
| Syntax Rules | List Title & ListName = Plural Table = Singular Lookups reference the LISTNAME Lookups and User fields require _id in their column names List titles/names are Title Case Field titles are sentence case No spaces in column names or in table names
//Bundle Header
{
"$schema": "./Bundle.schema.json",
"Name": "<BundleName>",
"Author": "<AuthorName> <<AuthorEmail>>",
"Description": "<Description>",
"Version": "1.0",
"Pages": {},
"Lists": [
//List Header
{
"Title": "",
"ListName": "",
"ListNameSingular": "",
"Searchable": true,
"ShortName": "",
"Table": "",
"SystemManaged": false,
"Fields": [
//Single Text Field
{
"Title": "",
"ColumnName": "",
"Description": "",
"FieldType": "Text",
"Searchable": true
},
//Multi Line Text Field
{
"Title": "",
"ColumnName": "",
"Description": "",
"FieldType": "Note"
},
//DateTime Field
{
"Title": "",
"ColumnName": "",
"Description": "",
"FieldType": "DateTime"
},
//Choice Field
{
"Title": "",
"ColumnName": "",
"Description": "",
"FieldType": "Choice",
"Settings": {
"Choices": [
{
"Text": "",
"AccentColour": "rgb(0, 0, 0)"
},
{
"Text": "",
"AccentColour": "black"
},
{
"Text": "",
"AccentColour": "#000000"
}
]
}
},
//Lookup Field
{
"Title": "",
"ColumnName": "_id",
"Description": "",
"FieldType": "Lookup",
"Settings": {
"LookupList": "",
"LookupField": ""
},
"Searchable": true
},
//Boolean Field
{
"Title": "",
"ColumnName": "",
"Description": "",
"FieldType": "Boolean"
},
//Number Field
{
"Title": "",
"ColumnName": "",
"Description": "",
"FieldType": "Number"
},
//Percentage Field
{
"Title": "",
"ColumnName": "",
"Description": "",
"FieldType": "Percentage"
},
//Currency Field
{
"Title": "",
"ColumnName": "",
"Description": "",
"FieldType": "Currency"
},
//User Field
{
"Title": "",
"ColumnName": "_id",
"Description": "",
"FieldType": "User",
"Searchable": true
},
//Whole Number Field
{
"Title": "",
"ColumnName": "",
"Description": "",
"FieldType": "Integer"
},
//Query
{
"Title": "Query",
"ColumnName": "query",
"SystemManaged": false,
"FieldType": "Subquery",
"Nullable": true,
"Searchable": true,
"Settings": {
"Choices": [],
"Query": "SELECT 10+1",
"DisplayAs": "Currency"
}
},
//Entity Tail
]
}
//Bundle Tail
]
}